import {defineStore} from 'pinia'
import {deng_ji, ji_po} from "@/activity/xiu_wei/deng_ji.js"
import lao_shu from '@/assets/image/lao_shu.jpg';
import hou_zi from '@/assets/image/hou_zi.jpg';
import ju_bao_peng from '@/assets/image/ju_bao_peng.jpg';
import shen_nv_zhi_xin from '@/assets/image/shen_nv_zhi_xin.jpg';
import xing_ceng_shen_fu from '@/assets/image/xing_ceng_shen_fu.jpg';
import ling_quan from '@/assets/image/ling_quan.jpg';
import nv_shen_zhi_lei from '@/assets/image/nv_shen_zhi_lei.jpg';
import ling_guo from '@/assets/image/ling_guo.jpg';

export const userStatus = defineStore('userStatus', {
    state: () => {
        return {
            // 人物的名字
            xin_ming: "李二蛋",
            // 道号
            dao_hao: "二蛋道人",
            // 修为的大阶
            xiu_da: 0,
            // 修为的细阶
            xiu_xi: 0,
            // 人物拥有的灵力
            ling_li: 0,
            // 增加灵力的基数
            ling_up: 10,
            // 人物的寿命
            shou_ming: 100,
            // 使用的寿命
            use_shou_ming: 18,
            // 使用天数
            use_day: 0,
            // 出生日期
            init_day: new Date(),
            // 人物的战斗属性
            attribute: {
                "shen_hun": 0,
                "jin_gu": 20,
                "dong_cha": 3,
                "xun_jie": 2,
                "xue_liang": 0,
                "gong_ji": 0,
                "fang_yu": 0,
                "ming_zhong": 0,
                "shan_bi": 0
            },
            // 修为 增益
            tone_up: [],
            // 已装备 装备表
            // key 为绑定的装备栏目 value 为装备的属性
            equipment: {},
            // 钱包
            wallet: {
                // 拥有的灵石
                "ling_shi": 5000
            },
            // 装备
            goods: {
                4: {
                    "name": "天地灵泉",
                    "describe": "夺天地之造化之灵泉，使用后可加快灵力增长五成，时效七天",
                    // 拥有装备的数量 装备
                    "num": 100,
                    // 功效
                    "effect": [
                        {
                            name: "灵气增长",
                            up: 100,
                            type: "ling_li"
                        }
                    ],
                    // 消耗品
                    "type": 1,
                    image: ling_quan
                },
                3: {
                    "name": "星辰神符",
                    "describe": "夺天地之造化之灵泉，使用后可加快灵力增长五成，时效七天",
                    "num": 9,
                    // 功效
                    "effect": [
                        {
                            name: "灵气增长",
                            up: 10000,
                            type: "ling_li"
                        }
                    ],
                    // 消耗品
                    "type": 1,
                    image: xing_ceng_shen_fu
                },
                1: {
                    "name": "灵气聚宝盆",
                    "describe": "夺天地之造化之灵泉，使用后可加快灵力增长五成，时效七天",
                    "num": 2,
                    "effect": [
                        {
                            name: "灵气增长",
                            up: 100000,
                            type: "ling_li"
                        }
                    ],
                    // 消耗品
                    "type": 1,
                    image: ju_bao_peng
                },
                2: {
                    "name": "神女之心",
                    "describe": "神女赐予下界的宝物，佩戴此物可以加快灵气增长百倍",
                    "num": 1,
                    // 装备绑定的空间
                    "equipment_space": 2,
                    // 装备加成
                    "effect": [
                        {
                            // 加成比例
                            name: "女神的祝福",
                            // 增幅比例
                            up: 1000,
                            // 增幅类型
                            type: "ling_up"
                        }
                    ],
                    // 装备
                    "type": 2,
                    image: shen_nv_zhi_xin
                },
            },
            // 灵宠
            ling_chong: {
                1: {
                    // 宠物名称
                    name: "噬金鼠",
                    // 速度
                    velocity: 5,
                    // 状态 rest 休息 work 劳作
                    state: "rest",
                    image: lao_shu
                },
                2: {
                    // 宠物名称
                    name: "穿天猴",
                    // 速度
                    velocity: 20,
                    // 状态 rest 休息 work 劳作
                    state: "work",
                    image: hou_zi
                }
            }
        }
    },
    getters: {
        load_user_info(state) {
            return state;
        }
    },
    actions: {
        // 用户资源增长 共用一个方法
        add_user_resource() {
            if (!this.add_ling_check()) {
                this.add_ling_li()
            }
            this.add_ling_shi(this.ling_shi_load_velocity())
            this.add_day(1)
            this.init_day = new Date(this.init_day.getTime() + 24 * 60 * 60 * 1000)
        },
        add_day(num) {
            this.use_day += num
            // 一年固定 365 天
            // 如果使用的天数 大于等于 365 天，增加一年使用寿命
            if (this.use_day >= 365) {
                this.use_day = 0
                this.use_shou_ming += 1;
            }
        },
        add_ling_li() {
            this.ling_li += this.figure_up_ling();
            if (this.ling_li >= this.tu_po_xu_yao()) {
                this.ling_li = this.tu_po_xu_yao()
            }
        },
        tu_po_xu_yao() {
            if (this.xiu_xi >= deng_ji[this.xiu_da].xi_fen.length) {
                return deng_ji[this.xiu_da].po * ji_po
            } else {
                return deng_ji[this.xiu_da].xi_fen[this.xiu_xi].po * ji_po
            }
        },
        add_ling_check() {
            return this.tu_po_xu_yao() <= this.ling_li
        },
        tu_po() {
            const add_check = this.add_ling_check()
            if (add_check) {
                if (this.xiu_xi >= deng_ji[this.xiu_da].xi_fen.length) {
                    // 增加突破寿命
                    this.shou_ming += Math.round(this.shou_ming * (deng_ji[this.xiu_da].shou / 100))
                    this.xiu_xi = 0
                    this.xiu_da += 1
                } else {
                    // 增加突破寿命
                    this.shou_ming += Math.round(this.shou_ming * (deng_ji[this.xiu_da].xi_fen[this.xiu_xi].shou / 100))
                    this.xiu_xi += 1
                }
                this.ling_li = 0
            }
            return add_check
        },
        clear_equipment(item) {
            if (item.id in this.goods) {
                this.goods[item.id].num += 1
            } else {
                // 初始化装备数量 1
                item["num"] = 1
                this.goods[item.id] = item
            }
            delete this.equipment[item.equipment_space]

            this.refresh_tone_up()
        },
        wear_equipment(item, index) {
            // 如果该位置已经装备了物品 不可以继续装备
            if (item.equipment_space in this.equipment) {
                return
            }
            // 装备了装备 需要讲装备数量减一
            this.goods[index].num -= 1
            // 如果已经没有该装备了 需要将装备清空
            if (this.goods[index].num <= 0) {
                delete this.goods[index]
            }
            // 增加装备 ID
            item["id"] = Number(index)
            this.equipment[item.equipment_space] = item

            this.refresh_tone_up()
        },
        // 刷新 加成
        refresh_tone_up() {
            // 先将加成内容清空
            this.tone_up = []
            // 判断是否存在 装备数据
            const keys = Object.keys(this.equipment);
            // 如果装备为空清空 直接退出
            if (keys.length === 0) {
                return
            }
            // 遍历所有装备
            keys.forEach(key => {
                const effects = this.equipment[key].effect
                // 判断装备是否存在加成
                if (effects.length > 0) {
                    // 遍历装备的加成
                    effects.forEach(effect => {
                        this.tone_up.push(effect)
                    })
                }
            })
        },
        // 计算灵力加成
        figure_up_ling() {
            let upNUm = 0
            this.tone_up.forEach(up => {
                switch (up.type) {
                    case "ling_up":
                        upNUm += up.up;
                        break
                }
            })
            return this.ling_up + this.ling_up * (upNUm / 100)
        },
        // 获得物品
        add_goods(goods) {
            // 如果没有该物品 增加该物品
            if (goods.id in this.goods) {
                // 增加物品的数量
                this.goods[goods.id].num += 1
            } else {
                // 数量初始化为 1
                goods["num"] = 1
                this.goods[goods.id] = goods
            }
        },
        add_ling_chong(item) {
            // 如果没有该物品 增加该物品
            if (item.id in this.ling_chong) {
                // 增加物品的数量
                this.ling_chong[item.id].num += 1
            } else {
                // 数量初始化为 1
                item["num"] = 1
                this.ling_chong[item.id] = item
            }
        },
        // 物品使用效果
        use_goods(key, num) {
            // 传进来的数量为空 直接返回
            if (num === undefined || num === null) {
                return
            }
            // 传进来的数量 大于物品拥有数量直接返回
            if (this.goods[key].num < num) {
                return
            }
            // 使用物品效果
            this.goods[key].effect.forEach(map => {
                switch (map.type) {
                    case "ling_li":
                        this.ling_li = this.ling_li + (map.up * num)
                }
            })
            // 扣减物品数量
            this.goods[key].num -= num
            // 如果 物品使用完毕将物品删除
            if (this.goods[key].num <= 0) {
                delete this.goods[key]
            }
        },
        // 扣减人物 寿命
        life_lost(num) {
            this.shou_ming -= num
        },
        // 灵石的获取效率
        ling_shi_load_velocity() {
            let velocity = 0;
            Object.keys(this.ling_chong).forEach(key => {
                if (this.ling_chong[key].state === 'work') {
                    velocity += this.ling_chong[key].velocity
                }
            })
            return velocity;
        },
        // 增加灵石
        add_ling_shi(num) {
            this.wallet.ling_shi += num
        },
        // 通过灵石 购买物品
        buy_ling_shi(item, type) {
            // 扣减灵石
            this.wallet.ling_shi -= item.cost
            // 获取物品
            if (type === 'goods') {
                this.add_goods(item)
            } else {
                this.add_ling_chong(item)
            }
        },
        // 初始化任务的 属性
        init_attribute() {
            // 血量 等于 神魂 * 5 + 筋骨 * 10
            this.attribute.xue_liang = this.attribute.shen_hun * 5 + this.attribute.jin_gu * 10
            // 攻击力 等于 神魂 * 2 + 筋骨 / 5 + 迅捷 / 2
            this.attribute.gong_ji = this.attribute.shen_hun * 2 + Math.round(this.attribute.jin_gu / 5) + Math.round(this.attribute.xun_jie / 2)
            // 防御力 等于 神魂 + 筋骨 * 2 + 洞察 / 2
            this.attribute.fang_yu = this.attribute.shen_hun + Math.round(this.attribute.jin_gu / 10) + Math.round(this.attribute.dong_cha / 2)
            // 命中 等于 神魂 / 2 + 洞察 + 迅捷 / 10
            this.attribute.ming_zhong = Math.round(this.attribute.shen_hun / 2) + this.attribute.dong_cha + Math.round(this.attribute.xun_jie / 2)
            // 迅捷 等于 神魂 / 4 + 洞察  / 2
            this.attribute.shan_bi = Math.round(this.attribute.shen_hun / 4) + Math.round(this.attribute.dong_cha / 3 ) + this.attribute.xun_jie
        }
    },
})
